コマンドラインのプロンプトにGoogle Cloudのprojectを表示させたい
はじめに
Google Cloudデータエンジニアのはんざわです。
以前、Google Cloud Shellのprojectをpecoで変更する方法を紹介しました。
今回の記事ではローカル環境でコマンドラインのプロンプトに現在のprojectを表示されるようにしたのでその方法を紹介したいと思います。
環境
os: macos ventura 13.5.2 shell: zsh 5.9
前準備
各種必要なパッケージのインストール
brew install peco && brew install --cask google-cloud-sdk && brew install jq
pecoの詳細な説明は過去の記事を参考にしてください。
最初に作ったもの
以下のスクリプトを.zshrc
ファイルに追記しました。
上から確認していきましょう。
function config_rprompt() { project_id=$(gcloud config configurations list --format=json | jq -r '.[] | select(.is_active == true) | .properties.core.project') RPROMPT=%F{032}[${project_id}]%f } # The following function is executed when the terminal is first started. config_rprompt function gpr() { project=$(gcloud projects list --format=json | jq -r '.[].projectId' | peco) gcloud config set project ${project} config_rprompt }
前半のconfig_rprompt
では、gcloud config configurations list
とjq
を使って表示させたいデータを取得し、RPROMPT
に渡す関数を定義しています。
function config_rprompt() { project_id=$(gcloud config configurations list --format=json | jq -r '.[] | select(.is_active == true) | .properties.core.project') RPROMPT=%F{032}[${project_id}]%f }
また、ターミナル起動時にも動作するように関数を呼び出しています。
# The following function is executed when the terminal is first started. config_rprompt
gpr
は以前のブログでも紹介しましたが、以下の2点を修正しました。
jq
でデータを整形するように変更- 変更後に
config_rprompt
を呼び出し、RPROMPT
を変更するように追記
function gpr() { project=$(gcloud projects list --format=json | jq -r '.[].projectId' | peco) gcloud config set project ${project} config_rprompt }
これを.zshrc
に追記すると以下のような表示になります。
よくなかった点
とにかくレスポンスが遅かったです。
gpr
はプロジェクトの一覧を取得する必要があるため挙動が遅いのは仕方ないと思います。調べていると現在有効になっているprojectはコマンド経由だけでなくファイルからも取得できるようなのでファイルからデータを取得するように変更したいと思います。
最終的にできたもの
config_rprompt
の関数を以下のように変更しました。
~/.config/gcloud
配下から各種必要なデータを取得し、適切なフォーマットに整形しています。
function config_rprompt() { project_id=$(awk '/project/{print $3}' ~/.config/gcloud/configurations/config_default) RPROMPT=%F{032}[${project_id}]%f }
下記ブログを参考にさせていただきました。ありがとうございます。
さいごに
pecoでprojectを変更し、プロンプトの表示も変更する方法を紹介しました。
興味があったら是非試してみて下さい。
今回みたいにターミナルをカスタマイズするのが好きなので今後も新しく作ったら紹介したいと思います。